/*
洛谷 1101
给一n \times nn×n的字母方阵，内可能蕴含多个“yizhong”单词。单词在方阵中是沿着同一方向连续摆放的。
摆放可沿着 88 个方向的任一方向，同一单词摆放时不再改变方向，单词与单词之间可以交叉,因此有可能共用字母。
输出时，将不是单词的字母用*代替，以突出显示单词。例如：

输入：
    8                     输出：
    qyizhong              *yizhong
    gydthkjy              gy******
    nwidghji              n*i*****
    orbzsfgz              o**z****
    hhgrhwth              h***h***
    zzzzzozo              z****o**
    iwdfrgng              i*****n*
    yyyygggg              y******g
*/
#include<bits/stdc++.h>
using namespace std;
const int Maxn=110;
int n;
char a[Maxn][Maxn];
bool vis[Maxn][Maxn];
//要遍历八个方向 
/*
x-1,y-1	    x-1,y	 x-1,y+1
x,y-1	    x,y		 x,y+1 
x+1,y-1 	x+1,y	 x+1,y+1

-1,-1    -1,0     -1,+1
0,-1     0,0      0,+1
+1,-1    +1,0     +1,+1

*/
int dx[]={1,1,1,0,0,-1,-1,-1};
int dy[]={1,0,-1,1,-1,1,0,-1};
string yz="yizhong";
void dfs(int x,int y){
	//外层for是遍历八个方向 
	for(int i=0;i<8;i++){
		//每个方向都立一个flag，为1表示是一个字符串 
		int flag=1;
		//这个for是遍历字符串的长度 
		for(int j=0;j<7;j++){
			//j*dx[i] 或 j*dy[i] 表示在这个方向上跳了几步，就对应着yz[j] 
			int tx=x+j*dx[i];
			int ty=y+j*dy[i];
			if(tx<1||tx>n||ty<1||ty>n||yz[j]!=a[tx][ty]){
				flag=0;
				break;
			}
		}    
		//如果沿着某个方向能找到字符串，那么就设置为1 
		if(flag){
			for(int j=0;j<7;j++){
				int tx=x+j*dx[i];
				int ty=y+j*dy[i];
				vis[tx][ty]=1;
			}
		}
	}	
}

int main(){
	cin>>n;
	for(int i=1;i<=n;i++){
		for(int j=1;j<=n;j++){
			cin>>a[i][j];
		}
	}
	//这个dfs是找到所有满足条件的字符串，并用Vis数组储存为1 
	for(int i=1;i<=n;i++){
		for(int j=1;j<=n;j++){
			if(a[i][j]=='y'){
				dfs(i,j);
			}
		}
	}
	//遍历整个数组，如果它的vis是1，说明它是一个字符串 
	for(int i=1;i<=n;i++){
		for(int j=1;j<=n;j++){
			if(!vis[i][j]) cout<<"*";
			else cout<<a[i][j];
		}
		cout<<endl;
	}
	return 0;
}